package blbetter.training;

import blbetter.db.BLDBRandom;
import blbetter.db.BLSpielVecDB;
import blbetter.netze.BlBetterNet;

public abstract class Simulator {
	public BLDBRandom db;

	protected int saisonId;
	
	/** gibt an ab welchem spieltag gewettet werden soll **/
	protected int abSpieltag;

	protected BlBetterNet blBetterNet;

	public int played, won = 0, lost = 0;

	protected double quote, gewinn, delta;

	public Simulator(BlBetterNet blBetterNet, int saisonId, int abSpieltag,
			double stake, double quote, double delta) {
		this.blBetterNet = blBetterNet;
		this.saisonId = saisonId;
		this.abSpieltag = abSpieltag;
		this.gewinn = stake;
		this.quote = quote;
		this.delta = delta;
		this.db = new BLSpielVecDB(saisonId);
	}

	public void compete(int anzSpiele) {
		double start = System.currentTimeMillis();
		for (; played < anzSpiele; played++) {
			if (played % 1000 == 0) {
				System.out.println(played + " - "
						+ (System.currentTimeMillis() - start) / 1000 + "s");
				start = System.currentTimeMillis();
			}
			competeSpiel();
			statistik();
		}
		statistikAusgeben();
	}

	protected abstract void competeSpiel();

	public abstract void statistik();

	public abstract void statistikAusgeben();

}
